- 나누어진 데이터를 하나의 뷰로 구성하여 제공하는 문제
- API 컴포지션
- 도메인 계층의 집약 서비스와 인프라 계층의 리포지터리 서비스를 통해 얻은 데이터를 어플리케이션 계층에서 인메모리로 결합하는 디자인 패턴
- 직감적이고 간단, 설계 구현 용이
- 운영 환경의 메모리에서 결합하기에 메모리 부하
- 리소스 부담으로 성능 및 확장성에 악영향
- CQRS
- 데이터 접근 처리를 갱신형 처리와 참조형 처리로 구분
- 각각 구현을 위해 서비스 컴포넌트와 데이터 저장소를 두는 디자인 패턴
- 명령과 질의를 다른 종류로 인식
- 참조형 처리
- 요청량이 방대하고 빠른 응답 필요
- 고속 검색 기능을 가진 데이터 저장소 배치
- 갱신형 처리
- 요청량은 적으나 안전하고 확실한 트랜잭션 완료 필요
- 신뢰성 높은 영구적 데이터 저장소 배치
- 이벤트 소싱
- 갱신형 저장소와 참조형 저장소의 동기화
- 밀접한 관련이 있는 데이터를 모아 이벤트 저장소 구축
- 비즈니스 데이터를 그대로 모은 저장소(event source)
- 하나의 저장소이므로 글로벌 트랜잭션 필요 없음
- 비즈니스 데이터와 친화성 높음
- 보관에는 좋으나 빠른 검색에 적합하지 않음
- MOM, 즉 메시징 기반 미들웨어를 구축하고 비동기 메시징을 통해 검색용 데이터 저장소와 동기화
- 동기화 시발점은 적절하게 선택
- 빠른 동기화를 원할 시 이벤트 소스의 갱신 트랜잭션 발생 시
- 시간적 차이 허용될 시 일정 시간이나, 트랜잭션이 쌓일 때
- CQRS & 이벤트 소싱의 장단점
- 장점
- 쿼리 구현의 용이성
- 데이터 감시
- 접근 제어 구현 용이성
- 서비스 모델링과 친화성 높음
- 단점
- 기존 설계와 달라 난해함
- 적합한 사용처를 확인하고 적용하는 것이 중요함